package web.suzy.oj.dao.discussion.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import web.suzy.oj.dao.discussion.DiscussionEntityService;
import web.suzy.oj.dao.discussion.ReplyEntityService;
import web.suzy.oj.dao.msg.MsgRemindEntityService;
import web.suzy.oj.mapper.ReplyMapper;
import web.suzy.oj.pojo.entity.discussion.Discussion;
import web.suzy.oj.pojo.entity.discussion.Reply;
import web.suzy.oj.pojo.entity.msg.MsgRemind;
import web.suzy.oj.pojo.vo.ReplyVO;

import javax.annotation.Resource;
import java.util.List;

/**
 * YangSuzy 软件工作室
 * 类名: ReplyEntityServiceImpl
 * 描述: ---- 待定 -----
 * 功能: ---- 待定 -----
 *
 * @author YangSuzy
 * Date: 2022/11/27 16:17
 */
@Service
public class ReplyEntityServiceImpl extends ServiceImpl<ReplyMapper, Reply> implements ReplyEntityService {

    @Autowired
    private ReplyMapper replyMapper;

    @Autowired
    private DiscussionEntityService discussionEntityService;

    @Resource
    private MsgRemindEntityService msgRemindEntityService;

    /**
     * 方法名: getAllReplyByCommentId
     * 描述: 获取该评论下的所有回复
     *
     * @param commentId 评论ID
     * @return java.util.List<web.suzy.oj.pojo.vo.ReplyVO>
     * @date 2022/11/27 16:17
     * @auther YangSuzy
     **/
    @Override
    public List<ReplyVO> getAllReplyByCommentId(Integer commentId) {
        return replyMapper.getAllReplyByCommentId(commentId);
    }

    /**
     * 方法名: updateReplyMsg
     * 描述: 异步方法 - 更新评论消息
     *
     * @param sourceId    消息源ID
     * @param sourceType  消息类型
     * @param content     消息内容
     * @param quoteId     被引用的上级ID
     * @param quoteType   被引用的上级类型
     * @param recipientId 接收方ID
     * @param senderId    发送方ID
     * @return void
     * @date 2022/11/27 16:19
     * @auther YangSuzy
     **/
    @Override
    public void updateReplyMsg(Integer sourceId, String sourceType, String content, Integer quoteId, String quoteType, String recipientId, String senderId) {
        //消息提示内容超出部分转换为省略号
        if (content.length() > 200) {
            content = content.substring(0, 200) + "...";
        }
        //新建消息提醒对象
        MsgRemind msgRemind = new MsgRemind();
        //设置操作类型：评论
        msgRemind.setAction("Reply")
                //设置消息来源
                .setSourceId(sourceId)
                //设置消息类型
                .setSourceType("Discussion")
                //设置消息内容
                .setSourceContent(content)
                //设置被引用的评论或讨论ID
                .setQuoteId(quoteId)
                //设置被引用的消息类型
                .setQuoteType(quoteType)
                .setRecipientId(recipientId)
                .setSenderId(senderId);

        Discussion discussion = discussionEntityService.getById(sourceId);
        if (discussion != null) {
            msgRemind.setUrl("/discussion-detail/" + sourceId);
        }
        msgRemindEntityService.saveOrUpdate(msgRemind);
    }
}
